<?php
App::uses('AppController','Controller');
class ClientesController extends AppController {
    
    var $uses = array('Cliente','CatalogoDetalle');
    var $components = array('Constantes');

	function beforeFilter(){
		if(!$this->Session->check('usuarioSesionSOT')){
			$this->redirect(array('controller'=>'Seguridad','action'=>'login'));
		}else{
			$this->set('usuarioSesionSOT',$this->Session->read('usuarioSesionSOT'));
		}
	}
	
    public function index(){
        $this->redirect(array('controller'=>'Clientes','action'=>'consultar_clientes'));
    }
    
    public function consultar_clientes(){
    	$this->layout = 'plantillaPrincipal';
    	$this->set('title_for_layout', '::Clientes::');
    	
    	//Buscar los clientes
    	$ruc = (isset($this->request->data['ruc']))?$this->request->data['ruc']:"";
    	$razonSocial = (isset($this->request->data['razonSocial']))?$this->request->data['razonSocial']:"";
    	$apellidoPaterno = (isset($this->request->data['apellidoPaterno']))?$this->request->data['apellidoPaterno']:"";
    	$apellidoMaterno = (isset($this->request->data['apellidoMaterno']))?$this->request->data['apellidoMaterno']:"";
    	$nombres = (isset($this->request->data['nombres']))?$this->request->data['nombres']:"";
    	$dni = (isset($this->request->data['dni']))?$this->request->data['dni']:"";
    	
    	$condiciones = array();
    	$condiciones["ruc"] = $ruc;
    	$condiciones["razonSocial"] = $razonSocial;
    	$condiciones["apellidoPaterno"] = $apellidoPaterno;
    	$condiciones["apellidoMaterno"] = $apellidoMaterno;
    	$condiciones["nombres"] = $nombres;
    	$condiciones["dni"] = $dni;
    	
    	$this->set("condiciones",$condiciones);
    	
    	$clientesArrayJSON = $this->fn_buscar_clientes_json($condiciones);
    	$this->set('clientesArrayJSON',$clientesArrayJSON);
    	
    	//Tomar el mensaje de accion si es que existiese
    	if($this->Session->check('msjRegistroCliente')){
     		$this->set('msjRegistroCliente',$this->Session->read("msjRegistroCliente"));
			$this->Session->delete('msjRegistroCliente');
    	}
    }
    
    public function nuevo_cliente(){
    	$this->layout = 'plantillaPrincipal';
    	$this->set('title_for_layout', '::Clientes::');
    	$this->fn_cargarCombos();
    }
    
    public function guardar_cliente(){
    	$this->layout = 'plantillaPrincipal';
    	
    	//Tomar los datos
    	if(isset($this->request->data)){
    		
    		$usuarioSesionSOT = $this->Session->read('usuarioSesionSOT');
  			$usuarioRegistro = $usuarioSesionSOT["Usuario"]["idUsuario"];
    		$fechaRegistro = date_create()->format('Y-m-d H:i:s');
    	
    		$dataSource = $this->Cliente->getDataSource();
    		
    		$dataSource->begin();

    		$data = $this->request->data["Cliente"];
    		
    		//Verificar el id , si esta vacio se solicita a la BD
    		$idCliente = "";
    		if(isset($data["idCliente"])){
    			if($data["idCliente"] != ""){
    				$idCliente = $data["idCliente"];
    			}
    		}
    		
    		$correlativo = "";
    		if($idCliente == ""){
    			$prefijo = "CLI";
    			
    			$longitudPrefijo = strlen($prefijo);
    			$longitudCorrelativo = 8;
    			$rs = $this->Cliente->query("select (ifnull(convert((select substring(max(idCliente),".($longitudPrefijo+1).",".$longitudCorrelativo.") from Clientes),decimal),0)+1) as 'correlativo'");
    			$correlativo = $rs[0][0]["correlativo"];

    			while(strlen($correlativo)<($longitudCorrelativo)){
    				$correlativo = "0".$correlativo;
    			}
    			
    			$correlativo = $prefijo.$correlativo;
    			
    			$objCliente["Cliente"]["idUsuarioCreacion"] = $usuarioRegistro;
    			$objCliente["Cliente"]["fechaCreacion"] = $fechaRegistro;
    		}else{
    			$correlativo = $data["idCliente"];
    			$objCliente = $this->Cliente->find('first',array('conditions' => array('Cliente.idCliente' =>$correlativo)));
    			$objCliente["Cliente"]["idUsuarioModifica"] = $usuarioRegistro;
    			$objCliente["Cliente"]["fechaModifica"] = $fechaRegistro;
    		}
    		
    		//Preparar los datos
    		$objCliente["Cliente"]["idCliente"] = $correlativo;
    		
    		//Tipo de persona
    		$objCliente["Cliente"]["idTipoPersonaCatalogo"] = $this->Constantes->TIPOS_PERSONAS;
    		$objCliente["Cliente"]["idTipoPersonaItem"] = $data["idTipoPersonaItem"];
    		
    		//Guardar de acuerdo al tipo de persona
    		if($data["idTipoPersonaItem"] == $this->Constantes->TIPO_PERSONA_NATURAL){
    			$objCliente["Cliente"]["apellidoPaterno"] = $data["apellidoPaterno"];
  				$objCliente["Cliente"]["apellidoMaterno"] = $data["apellidoMaterno"];
  				$objCliente["Cliente"]["nombres"] = $data["nombres"];
  				$objCliente["Cliente"]["dni"] = $data["dni"];
  				$objCliente["Cliente"]["nombreEntidad"] = $data["apellidoPaterno"]." ".$data["apellidoMaterno"]." , ".$data["nombres"];
    		}else{
    			$objCliente["Cliente"]["ruc"] = $data["ruc"];
  				$objCliente["Cliente"]["razonSocial"] = $data["razonSocial"];
  				$objCliente["Cliente"]["nombreEntidad"] = $data["razonSocial"];
    		}
    		
  			$objCliente["Cliente"]["telefono"] = $data["telefono"];
  			$objCliente["Cliente"]["correo"] = $data["correo"];
  			
  			if ($this->Cliente->save($objCliente)) {
  				if($idCliente == ""){
  					$this->Session->write('msjRegistroCliente',"Se registr&oacute; al cliente exitosamente");
  				}else{
  					$this->Session->write('msjRegistroCliente',"Se actualiz&oacute; al cliente exitosamente");
  				}
  				
  				$dataSource->commit();
  				$this->redirect(array('controller'=>'Clientes','action'=>'editar_cliente',"?" => array("idCliente" => $correlativo)));
  			}else{
  				$this->Session->write('msjRegistroCliente',"No se pudo registrar al cliente");
  				$dataSource->rollback();
  				$this->redirect(array('controller'=>'Clientes','action'=>'consultar_clientes'));
  			}
    	}else{
    		$this->redirect(array('controller'=>'Clientes','action'=>'consultar_clientes'));
    	}
    }

    public function editar_cliente(){
    	$this->layout = 'plantillaPrincipal';
    	$this->set('title_for_layout', '::Clientes::');
    	
    	if(isset($this->request->query['idCliente'])){
    		$idCliente = $this->request->query['idCliente'];
    	
    		$objCliente = $this->Cliente->find('first',array('conditions' => array('Cliente.idCliente' =>$idCliente)));
    
    		if(count($objCliente)>0){
    			$this->fn_cargarCombos();
    			$this->set("objCliente",$objCliente);
    			
    			//Tomar el mensaje de accion si es que existiese
	    		if($this->Session->check('msjRegistroCliente')){
	     			$this->set('msjRegistroCliente',$this->Session->read("msjRegistroCliente"));
					$this->Session->delete('msjRegistroCliente');
	    		}
    	
    			$this->render('nuevo_cliente');
    		}else{
    			$this->redirect(array('controller'=>'Clientes','action'=>'consultar_clientes'));
    		}
    	}else{
    		$this->redirect(array('controller'=>'Clientes','action'=>'consultar_clientes'));
    	}
    }
    
    function fn_buscar_clientes_json($condiciones){
    	$arrayJSON = array();
    	
    	$ruc = $condiciones["ruc"];
    	$razonSocial = $condiciones["razonSocial"];
    	$apellidoPaterno = $condiciones["apellidoPaterno"];
    	$apellidoMaterno = $condiciones["apellidoMaterno"];
    	$nombres = $condiciones["nombres"];
    	$dni =  $condiciones["dni"];
    	
    	//Buscar los clientes ordenados por apellidoPaterno asc
    	$conditions = array();
    	
    	if($ruc != ""){
    		$conditions["Cliente.ruc LIKE"] = $ruc.'%';
    	}
    	
    	if($razonSocial != ""){
    		$conditions["Cliente.razonSocial LIKE"] = $razonSocial.'%';
    	}
    	
    	if($apellidoPaterno != ""){
    		$conditions["Cliente.apellidoPaterno LIKE"] = $apellidoPaterno.'%';
    	}
    	
    	if($apellidoMaterno != ""){
    		$conditions["Cliente.apellidoMaterno LIKE"] = $apellidoMaterno.'%';
    	}
    	
    	if($nombres != ""){
    		$conditions["Cliente.nombres LIKE"] = $nombres.'%';
    	}
    	
    	if($dni != ""){
    		$conditions["Cliente.dni LIKE"] = $dni.'%';
    	}
    	
    	$clientes = $this->Cliente->find('all',array('conditions'=>array('AND'=>$conditions),'order'=>'Cliente.nombreEntidad asc'));
    	
    	$i = 0;
    	$dim = count($clientes);
    	
    	$clientesArrayJSON = array();
    	while($i<$dim){
    		
    		$objCliente = $clientes[$i];
    		$objJson = array();
    		$objJson["id"] = $objCliente["Cliente"]["idCliente"];
    		
    		$objJson["tipoPersona"] = $objCliente["TipoPersona"]["descripcion"];
    		
    		if($objCliente["Cliente"]["idTipoPersonaItem"] == $this->Constantes->TIPO_PERSONA_NATURAL){
    			$objJson["documento"] = $objCliente["Cliente"]["dni"];
    		}else{
    			$objJson["documento"] = $objCliente["Cliente"]["ruc"];
    		}

			$objJson["nombreEntidad"] = $objCliente["Cliente"]["nombreEntidad"];    		
    		$objJson["correo"] = $objCliente["Cliente"]["correo"];
    		$objJson["telefono"] = $objCliente["Cliente"]["telefono"];
    		
    		$clientesArrayJSON[$i] = $objJson;
    		$i = $i + 1;
    	}
    	return $clientesArrayJSON;
    }
    
    private function fn_cargarCombos(){
    	//Traer el listado de tipos de personas
    	$contidions = array();
    	$conditions["CatalogoDetalle.idCatalogo"] = $this->Constantes->TIPOS_PERSONAS;
    	$tiposPersonas = $this->CatalogoDetalle->find('all',array('conditions'=>$conditions,'order'=>'CatalogoDetalle.numOrden asc'));
    	$this->set('tiposPersonas',$tiposPersonas);
    }
}
?>